package com.tbm.console.util;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;

/**
 * 比较2个相同类型的不同对象，找到这2个对象的不同的地方，并展示记录一下
 */
public class ContrastObjByElementUtil<T> {
    /**
     *
     * @param obj1 -- Example
     * @param obj2 -- List
     * @return
     */
    public T contrastObj(T obj1,  T obj2) {
        try {
            Class clazz = obj1.getClass();
            Field[] fields = obj1.getClass().getDeclaredFields();
            for (Field field : fields) {
                PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
                Method getMethod = pd.getReadMethod();
                Object o1 = getMethod.invoke(obj1);
                Object o2 = getMethod.invoke(obj2);
                String s1 = o1 == null ? "" : o1.toString();//避免空指针异常
                String s2 = o2 == null ? "" : o2.toString();//避免空指针异常
                if(s1.equals("")){
                    continue;
                }else if(!s1.equals(s2)){
                    return obj2;
                }

            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return null;
    }


}
